<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script>
      // 1、js一共有多少种数据类型?
      // 一共有两种数据类型;
      // 基础数据类型（简单数据类型）：string number boolean undefined null symbol bigint
      // 引用数据类型（复杂数据类型）：object array function

      // 2、js检测数据类型有哪些方法?
      // 2.1typeof检测数据类型
      //例：console.log(typeof 18)//number
      // 2.2instanceof
      // 例： let arr = [1,2,4]
      //      console.log( arr instanceof Array ) //true
      // 2.3使用object 的 toString
      // 例：Object.prototype.toString.call(需要判断的值)

      // 3、undefined和null的区别?	用typeof检测它们分别返回什么值?
      // undefined与null相等，但不全等，因为都是代表这无效的值，所以相等；但是不是同一个数据类型，所以不全等
      // undefined表示no value没有值，声明了，但没有赋值就会得到undefined，会占用空间
      // null表示no object没有对象，获取不到对象就会得到null，null不会占用空间

      // 使用typeof检测null返回的值的时候，会返回一个object，这是个历史遗留的bug
      // JavaScript 数据类型在底层都是以二进制的形式表示的，二进制的前三位为 0 会被 typeof 判断为对象类型，而 null 的二进制位恰好都是   0 ，因此，null 被误判断为 Object 类型。
      //使用typeof检测undefined的时候会返回一个undefined，因为他本来的值就是undefined

      // 4、写出下列对应结果
      let str_4 = '0';
      let str1_4 = '';
      let str2_4 = ' ';
      let unde_4 = undefined;
      let nu_4 = null;
      let num_4 = 0;
      let num1_4 = -10;

      Boolean(str_4); //true
      Boolean(str1_4); //false
      Boolean(str2_4); //true
      Boolean(unde_4); //false
      Boolean(nu_4); //false
      Boolean(num_4); //false
      Boolean(num1_4); //true

      // 5、写出下列对应结果	注意：需要分别使用Number、String、toString去转换数据类型
      let str_5 = '0';
      console.log(Number(str_5)); //0
      console.log(String(str_5)); //'0'
      console.log(str_5.toString()); //'0'
      let num_5 = -10;
      console.log(Number(num_5)); //-10
      console.log(String(num_5)); //'-10'
      console.log(num_5.toString()); //'-10'
      let flag_5 = true;
      console.log(Number(flag_5)); //1
      console.log(String(flag_5)); //true
      console.log(flag_5.toString()); //true
      let ud_5 = undefined;
      console.log(Number(ud_5)); //NaN
      console.log(String(ud_5)); //undefined
      console.log(ud_5.toString()); //报错Cannot read properties of undefined (reading 'toString')
      let nu_5 = null;
      console.log(Number(nu_5)); //0
      console.log(String(nu_5)); //null
      console.log(nu_5.toString()); //报错Cannot read properties of null (reading 'toString')

      // 6、检测下面的变量各自的数据类型
      let str_6 = ''; //undefined
      let num_6 = '-10'; //string
      let num1_6 = 0; //number
      let nu_6 = undefined; //undefined
      let nu1_6 = 'undefined'; //string
      let nu2_6 = 'null'; //string
      let nu3_6 = null; //object
      let obj_6 = '{}'; //string
      let obj1_6 = {}; //object
      let sy_6 = Symbol('n'); //symbol
    </script>
  </body>
</html>
